package frsf.cidisi.exercise.proyectoia.situationcalculus;

import frsf.cidisi.faia.agent.Agent;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusPerception;
import frsf.cidisi.faia.environment.Environment;

public class DronePerception extends SituationCalculusPerception {

	
	public static final int VICTIMARIO = -1;
	public static final int DESCONOCIDO = 0;
    public static final int ESQUINA_VISTA = 2;
    public static final int PERSONAS = 1;

  	
	private int[] victimario;
	private int[] personas;
	private int[] esquinasVistas;	
	private int fila;
	private int columna;

    public DronePerception(Agent agent, Environment environment) {
        super(agent,environment);

    }
    
    public DronePerception() {
        super();

    }

    @Override
    public void initPerception(Agent agent, Environment environment) {

    }

    @Override
    public String toString() {
        
        // DEBE COINCIDIR CON EL PREDICADO "PERCEPCION" DEFINIDO EN PROLOG
        // tiene 4 argumentos, los 2 primeros son arreglos de 9 elementos, y los otros 2 son la posicion
    	StringBuffer percepcion = new StringBuffer("percepcion([");
    	
    	// Esquinas con Personas
    	for(int i=0; i<8; i++)
    	{
    		percepcion.append(this.convertirCelda(this.getPersonas()[i]));
    		percepcion.append(",");
    	}
    	percepcion.append(this.convertirCelda(this.getPersonas()[8]));
    	percepcion.append("],[");
    	
    	// Esquinas Vistas y Victimario
    	for(int i=0; i<8; i++)
    	{
    		if(this.getVictimario()[i]==-1)
    			percepcion.append(this.convertirCelda(this.getVictimario()[i]));
    		else
    			percepcion.append(this.convertirCelda(this.getEsquinasVistas()[i]));
    		percepcion.append(",");
    	}
    	if(this.getVictimario()[8]==-1)
			percepcion.append(this.convertirCelda(this.getVictimario()[8]));
		else
			percepcion.append(this.convertirCelda(this.getEsquinasVistas()[8]));
		percepcion.append("],");
		
		// Posicion del Drone
		percepcion.append(this.getFila());
		percepcion.append(",");
		percepcion.append(this.getColumna());
		percepcion.append(")");
		
        return percepcion.toString();

    }

	public int[] getVictimario() {
		return victimario;
	}

	public void setVictimario(int[] victimario) {
		this.victimario = victimario;
	}

	public int[] getPersonas() {
		return personas;
	}

	public void setPersonas(int[] personas) {
		this.personas = personas;
	}

	public int[] getEsquinasVistas() {
		return esquinasVistas;
	}

	public void setEsquinasVistas(int[] esquinasVistas) {
		this.esquinasVistas = esquinasVistas;
	}

	public int getFila() {
		return fila;
	}

	public void setFila(int fila) {
		this.fila = fila;
	}

	public int getColumna() {
		return columna;
	}

	public void setColumna(int columna) {
		this.columna = columna;
	}
    
	private String convertirCelda(int cellState) {
        String result = null;

        switch (cellState) {
        	case DronePerception.DESCONOCIDO:
	            result = "desconocido";
	            break;
            case DronePerception.PERSONAS:
                result = "personas";
                break;
            case DronePerception.VICTIMARIO:
                result = "victimario";
                break;
            case DronePerception.ESQUINA_VISTA:
                result = "vista";
                break;
        }

        return result;
    }


}
